Prima posta

Otázka od: Vlastimil Zdenek

2. 6. 2004 11:23

Zdravim vsechny,
muzete mi nekdo prosim poradit, jak odeslat email s prilohou bez jakekoli
komunikace s uzivatelem? Uzivatel pouze stiskne tlacitko a mail se odesle
pripadne se ulozi do "Posta k odeslani".......
Doposud pouzivame toto od Petra Vonese, ale i po vynechani "Mapi_Dialog" se
stejne dialog(i kdyz jednodussi) zobrazi a musi se potvrdit........

Diky za pomoc

D5 Ent, MSSQL 2000, NT4

Vlasta


function SendMail(Prijemce,Kopie,Soubor,TypSouboru,Predmet,TextMailu:String) :
Boolean;
var
  Zprava : MapiMessage;
  Adresat : array [0..1] of MapiRecipDesc;
  MapiSoubor : MapiFileDesc;
  Vysledek : Cardinal;
  Reg : TRegistry;
begin
{ nastavime simple MAPI }
  Reg := TRegistry.Create;
  try
    with Reg do begin
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('\Software\Microsoft\Windows Messaging Subsystem', False)
      then WriteString('MAPI', '1');
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;

{ struktura prijemce }
  with Adresat[0] Do Begin
    ulReserved := 0;
   ulRecipClass := Mapi_To;
   lpszName := PChar(Prijemce);
   lpszAddress := nil;
   ulEIDSize := 0;
   lpEntryID := nil;
  end;
  with Adresat[1] Do Begin
    ulReserved := 0;
   ulRecipClass := Mapi_CC;
   lpszName := PChar(Kopie);
   lpszAddress := nil;
   ulEIDSize := 0;
   lpEntryID := nil;
  end;

{ struktura prilohy }
  with MapiSoubor do begin
    ulReserved := 0;
    flFlags := 0;
    nPosition := 0;
    lpszPathName := PChar(Soubor);
    lpszFileName := nil;
    lpFileType := PChar(TypSouboru);
  end;

{ struktura vlastni zpravy }
  with Zprava do begin
    ulReserved := 0;
    lpszSubject := PChar(Predmet);
    lpszNoteText := PChar(TextMailu);
    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := 0;
    lpOriginator := nil;
{ if edMailKopie.Text <> ''
      then nRecipCount := 2
      else }nRecipCount := 1;
    lpRecips := @Adresat;
    nFileCount := 1;
    lpFiles := @MapiSoubor;
  end;

{ pokusime se to odeslat, pokud nema byt dialog, je treba vypustit Mapi_Dialog
}
  Result := False;
  Vysledek := MapiSendMail(0, Application.Handle, Zprava,
    Mapi_Dialog or Mapi_LogOn_UI or Mapi_New_Session, 0);
  case Vysledek of
    Success_Success : Result := True;
    Mapi_E_User_Abort : Result := False;
  else
    
Application.MessageBox(' Nepodaoilo se poslat zpravu elektronickou postou.'+#13#13+
                           
' Zkontrolujte, zda je vyplnina e-mailova adresa,'+#13+
                           
'popoipadi pokud pouzivate Outlook expres zkontrolujte,'+#13+
                           
' zda je nastaven jako vychozi klient MAPI.' , 'Chyba', mb_OK +
mb_IconError);
  end;
end;